﻿using System.Data.Odbc;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;



namespace WindowsFormsApplication1
{
    

    public partial class frm_login : Form
    {
        public static NpgsqlConnection conn;
        public static OracleConnection con;
        public static bool oracle;
        public static bool postgre;
        public static string user;
        public static Int16 tipo;
        
        public frm_login()
        {
            InitializeComponent();
        }
        private void enable_controls()
        {
            txt_ip.Enabled = true;
            txt_port.Enabled = true;
            txt_bd.Enabled = true;
            txt_pass.Enabled = true;
            txt_user.Enabled = true;
            lbl_conectando.Visible = false;
            this.Refresh();
        }

        private void disable_controls()
        {
            txt_ip.Enabled = false;
            txt_port.Enabled = false;
            txt_bd.Enabled = false;
            txt_pass.Enabled = false;
            txt_user.Enabled = false;
            lbl_conectando.Visible = true;
            this.Refresh();
        }

        private void btn_conect_Click(object sender, EventArgs e)
        {
          try
            {
            disable_controls();
            oracle = false;
            postgre = false;
            if ((txt_bd.Text == "") || (txt_ip.Text == "") || (user == "") || (txt_pass.Text == "") || (txt_port.Text == ""))
                MessageBox.Show("Debe llenar todos los campos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
            {
                    user = txt_user.Text;
                    if (rdb_posg.Checked)
                    {
                        conn = new NpgsqlConnection();
                        //conn.ConnectionString = "Server=" + txt_ip.Text + ";Port=" + txt_port.Text + ";User Id=" + user + ";Password=" + txt_pass.Text + ";Database=" + txt_bd.Text + ";";
                        user = "postgres";
                        conn.ConnectionString = "Server=localhost;Port=5432;User Id="+user+";Password=abd123;Database=postgres;";
                        conn.Open();
                        postgre = true;
                    }
                    else
                    {
                        con = new OracleConnection(); 
                        con.ConnectionString = "Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = " + txt_ip.Text + ")(PORT = " + txt_port.Text + ")))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = " + txt_bd.Text + "))); User Id = " + user + "; Password = " + txt_pass.Text + ";";
                        //con.ConnectionString = "Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.100)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = abd))); User Id = " + user + "; Password = ABD123;";
                        con.Open();
                        oracle = true;
                    }
                    Form w = new Principal();
                    w.Show();
                    Principal.pantalla_inicio = this;
                    this.Hide();
             }
            }
          catch (OracleException oe)
          {
              MessageBox.Show("Revise que la información dada o espere unos segundos e intente denuevo.\nSi nada de esto funciona revise su conexión con el servidor Oracle y su configuración\nA continuación se detalla la exepción: \n\n" + oe.Message, "Oracle exeption", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
          catch (NpgsqlException pe)
          {
              MessageBox.Show("Revise que la información dada o espere unos segundos e intente denuevo.\nSi nada de esto funciona revise su conexión con el servidor Postgresql y su configuración\nA continuación se detalla la exepción: \n\n" + pe.Message, "Postgresql exeption", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
          catch (Exception ex)
          {
              MessageBox.Show("Intente la operación nuevamente, de no funcionar reinicie la aplicación\n Se detalla la exepción:\n\n" + ex.Message, "Exepcion del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
          finally
          {
              enable_controls();
          }
        }

        private void btn_canc_Click(object sender, EventArgs e)
        {
            cerrar_programa();
        }

        public void cerrar_programa()
        {
            MessageBox.Show("Que tenga un buen día ;o)", "Multi-Bd-Explorer", MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.Close();
        }

        public void cerrar_session()
        {
            try
            {
                if (oracle)
                {
                    con.Close();
                }
                if (postgre)
                {
                    conn.Close();
                }
            }
            catch (OracleException oe)
            {
                MessageBox.Show("Ocurrio un evento inesperado al cerrar la sesion Oracle. Multi-Bd-Explorer forzara el cierre de session.\nA continuación se detalla la exepción Oracle: \n\n" + oe.Message, "Oracle exeption", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (NpgsqlException pe)
            {
                MessageBox.Show("Ocurrio un evento inesperado al cerrar la sesion Postgresql. Multi-Bd-Explorer forzara el cierre de session.\nA continuación se detalla la exepción Postgresql: \n\n" + pe.Message, "Postgresql exeption", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
               MessageBox.Show("Ocurrio un evento inesperado en lo interno del programa.\nPara prevenir futuras fallas se recomienda que reinicie Multi-Bd-Explorer.\n\nA continuación se detalla el error:\n\n" + ex.Message, "Exepcion del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                oracle = false;
                postgre = false;
            }
        }

      
    }
}
